package bdhub.littletail.lib.utils.log;

import android.util.Log;

import bdhub.littletail.lib.config.CConfig;

/**
 * Created by Freddy on 2016/2/23.
 * chenshichao@outlook.com
 */
public class CLog {
    private static String TAG = CLog.class.getSimpleName();
    private static final boolean ENABLE = CConfig.DEBUG;// Log日志开关总闸
    /** 是否允许输出信息到LogCat */
    private static boolean isShowToLogCat = true;
    //用来准确自动获取调用者信息作为 log tag 的
    private static int move = 1;

    public enum CLogType {
        V(2),
        D(3),
        I(4),
        W(5),
        E(6);

        private int value;

        CLogType(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }
    }

    public static void show(Object infos) {
        show(CLogType.D, infos);
    }

    public static void show(CLogType logType, Object infos) {
        if(!ENABLE) {
            return;
        }

        if(!isShowToLogCat) {
            return;
        }

        StackTraceElement elment = new Exception().getStackTrace()[move];
        String tag = TAG;
        if(elment.getFileName() != null) {
            tag = elment.getMethodName() + ":" + elment.getLineNumber()
                    + "_" + elment.getFileName().substring(0,
                    elment.getFileName().indexOf("."));
        }

        switch (logType) {
            case V :
                Log.v(tag, infos.toString());
                break;

            case D :
                Log.d(tag, infos.toString());
                break;

            case I :
                Log.i(tag, infos.toString());
                break;

            case W :
                Log.w(tag, infos.toString());
                break;

            case E :
                Log.e(tag, infos.toString());
                break;

            default :
                break;
        }
    }

    /**
     * 保持与传统Log一致的使用
     *
     * @param tag
     *            标志
     * @param infos
     *            信息
     */
    public static void d(String tag, Object infos)
    {
        if (!ENABLE)
        {
            return;
        }
        Log.d(tag, infos.toString());
    }

    /**
     * 保持与传统Log一致的使用
     *
     * @param tag
     *            标志
     * @param infos
     *            信息
     */
    public static void e(String tag, Object infos)
    {
        if (!ENABLE)
        {
            return;
        }
        Log.e(tag, infos.toString());
    }

    /**
     * 保持与传统Log一致的使用
     *
     * @param tag
     *            标志
     * @param infos
     *            信息
     */
    public static void e(String tag, Object infos, Throwable tr)
    {
        if (!ENABLE)
        {
            return;
        }
        Log.e(tag, infos.toString(), tr);
    }

    /**
     * 保持与传统Log一致的使用
     *
     * @param tag
     *            标志
     * @param infos
     *            信息
     */
    public static void v(String tag, Object infos)
    {
        if (!ENABLE)
        {
            return;
        }
        Log.v(tag, infos.toString());
    }

    /**
     * 保持与传统Log一致的使用
     *
     * @param tag
     *            标志
     * @param infos
     *            信息
     */
    public static void w(String tag, Object infos)
    {
        if (!ENABLE)
        {
            return;
        }
        Log.w(tag, infos.toString());
    }

    /**
     * 保持与传统Log一致的使用
     *
     * @param tag
     *            标志
     * @param infos
     *            信息
     */
    public static void w(String tag, Object infos, Throwable tr)
    {
        if (!ENABLE)
        {
            return;
        }
        Log.w(tag, infos.toString(), tr);
    }

    /**
     * 保持与传统Log一致的使用
     *
     * @param tag
     *            标志
     * @param infos
     *            信息
     */
    public static void i(String tag, Object infos)
    {
        if (!ENABLE)
        {
            return;
        }

        if (infos == null)
        {
            Log.i(tag, "null");
        } else
        {
            Log.i(tag, infos.toString());
        }

    }
}
